package desmontec.sistema

import java.util.Calendar
import java.util.GregorianCalendar
import desmontec.util.Constantes;
class SecUserService {

    static transactional = true
    
	def springSecurityService
	def mailService
    
	def atualizaStatusContas() {
		def usuarios = SecUser.findAll()
		for (us in usuarios){
			if (!us.ehAdmin()){
				us.accountLocked = validaConta(us.dataValidade)
			}
			
		}
    }
	
	def validaConta(Date dataValidade) {
		Calendar meuCalendario = GregorianCalendar.getInstance()
		Date dataAtual = meuCalendario.getTime()
		return dataAtual.after(dataValidade)
	}
	
	def geraNovaSenha(SecUser usuario){
		
		String novaSenha = geraSenhaRandomica()
		String senhaAtual = usuario.password
		usuario.password = springSecurityService.encodePassword(novaSenha)
		usuario.save(flush:true)
		String corpoEmail = " Ola "+usuario.nome+","+Constantes.LINHA+
							"Como requisitado, recuperamos sua senha." +Constantes.LINHA+
							"login: "+usuario.username+Constantes.LINHA+
							"senha: "+novaSenha+Constantes.LINHA+
							Constantes.LINHA+
							"Este e um email automatico, por favor nao responda."+Constantes.LINHA
		
		try {
			
			mailService.sendMail {
				to usuario.email
				subject "Recuperacao de senha"
				body corpoEmail
			}
		}
		catch (Exception e){
			usuario.password = senhaAtual
			usuario.save(flush:true)
			return false;
			
		}
		return true
	}
	
	def geraSenhaRandomica(){
		
		String caracteres = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
		Random r = new Random();
		int tam = 6 + r.nextInt(3);
		String senha = "";
		for (int i = 0; i < tam; i++){
			int c = r.nextInt(caracteres.length());
			senha+=caracteres.charAt(c);
		}
		return senha;
	}	
}
